/**
  * @Author: 赵京涛 z19472333952022@163.com
  * @Date: 2024-10-08 09:40:41
  * @LastEditors: 赵京涛 z19472333952022@163.com
  * @LastEditTime: 2024-10-08 09:40:41
  * @projectName: HeBeiHaiYangData
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki
 */
import router from '@/router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import getPageTitle from '@/utils/get-page-title'
import $ from 'jquery'
import { useLocalStorage } from '@/hooks'

NProgress.configure({ showSpinner: false }) // 进度条初始配置
const whiteList = ['/login', '/register'] // 不用验证的白名单
router.beforeEach(async(to, from, next) => {
  $('.pieTooltip').remove()
  // 跳转前初始化进度条
  NProgress.start()
  // 设置页面标题
  document.title = getPageTitle(to.meta.title)
  // 确定用户是否已登录
  const hasToken = useLocalStorage.getItem('token')
  const userInfo = JSON.parse(useLocalStorage.getItem('userInfo'))

  // 判断是否登录
  if (hasToken && userInfo) {
    if (to.path === '/login') {
      next({ path: '/' })
      NProgress.done()
    } else {
      // 判断浏览器兼容
      if (navigator.userAgent.indexOf('MSIE') > -1) {
        // 跳转不兼容页面
      } else {
        const hasGetUserInfo = store.getters.name
        if (hasGetUserInfo) {
          next()
        } else {
          try {
            // 获取用户信息
            await store.dispatch('user/getUserInfo')
            store.dispatch('GenerateRoutes').then(accessRoutes => {
              // 根据roles权限生成可访问的路由表
              router.addRoutes(accessRoutes) // 动态添加可访问路由表
              next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
            })
          } catch (error) {
            // 删除存储的登录信息，重定向到登录页
            await store.dispatch('user/resetToken')
            Message.error(error || 'Has Error')
            next(`/login`)
            NProgress.done()
          }
        }
      }
    }
  } else {
    // 没有登录信息
    if (whiteList.indexOf(to.path) !== -1) {
      // 在白名单中设置，直接进入
      next()
    } else {
      // 其他无权访问的页面将重定向到登录页面。
      next(`/login`)
      next()
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  // 关闭进度条
  NProgress.done()
})
